<?php
/**
 * Created by PhpStorm.
 * User: lhl
 * Date: 2020/12/23
 * Time: 14:00
 * Features: 资产组管理
 */

namespace app\adminapiv3\validate;


use think\Validate;

class ServerHostGroupValidate extends Validate
{
    //验证规则
    protected $rule = [
        'id' => 'require|integer|egt:1',
        'name|资产组名称' => 'require|max:21|unique:server_host_group',
        'description|资产组描述' => 'require|max:42',
        'module|授权模块' => 'require|array|checkModule'
    ];

    //错误信息
    protected $message = [
        'name.unique' => '该资产组名称已存在',
        'module.require' => '请勾选授权模块',
        'module.array' => '授权模块参数格式错误',
    ];


    //验证场景
    protected $scene = [
        //添加
        'add' => ['name','description','module'],
        //修改
        'modify' => ['id','name','description','module'],
        //修改前回显
        'modify_detail' => ['id'],
    ];


    /**
     * 场景单独验证: 删除
     */
    public function sceneDel()
    {
        //逗号隔开的字符串
        return $this->only(['id'])
            ->remove('id', ['integer','egt'])
            ->append('id','regex:([0-9]+[,]?)+');
    }

    /**
     * 自定义验证规则: 验证模块授权数组
     */
    protected function checkModule($value,$rule,$data = []){
        if(!is_array($value)){
            return false;
        }
        if(!$value){
            return '必须勾选至少一个授权模块';
        }
        foreach ($value as $item){
            if(!isset($item['module_id']) || !is_numeric($item['module_id'])){
                return '勾选模块后,module_id为必填参数或module_id参数格式错误';
            }
            if(!isset($item['number']) || !is_numeric($item['number'])){
                return '请填写授权数量';
            }
            if($item['number'] < 1){
                return '授权数量至少为1';
            }

            if(!isset($item['etime']) || !$item['etime']){
                return '请填写结束时间';
            }

            if(!strtotime($item['etime'])){
                return '时间格式错误';
            }

        }
        return true;
    }

}